#!/bin/bash

CONTAINER_NAME="mysql"
IMAGE_NAME="mysql"
MYSQL_ROOT_DIR="/home/server/mysql"
PASSWORD="aff63db102754421b404ed67e9ffdcc1"

# 检测命令是否存在
command_exists() {
  local command_name="$1"
  type "$command_name" >/dev/null 2>&1
}

# 检查依赖命令是否已安装，如果未安装，则自动进行安装
check_dependency() {
  local dependency="$1"
  if command_exists "$dependency"; then
    echo "$dependency 已安装。"
  else
    echo "$dependency 暂未安装，请先执行 $dependency 安装脚本。"
    exit 1
  fi
}

# 判断容器是否存在
container_exist(){
  local container_name="$1"
  echo "检查容器 $container_name 是否存在..."
  if docker container inspect "$container_name" > /dev/null 2>/dev/null ; then
    echo "容器 $container_name 已存在。"
    return 0
  else
    echo "容器 $container_name 不存在。"
    return 1
  fi
}

# 判断镜像是否存在
image_exist(){
  local image_name="$1"
  echo "检查镜像 $image_name 是否存在..."
  if docker image inspect "$image_name" > /dev/null 2>/dev/null ; then
    echo "镜像 $image_name 已存在。"
    return 0
  else
    echo "镜像 $image_name 不存在。"
    return 1
  fi
}

check_dir(){
  local path="$1"
  echo "检查目录 $path 是否存在..."
  # 检测并创建目录
  if [ ! -d "$MYSQL_ROOT_DIR" ]; then
    echo "目录不存在，创建目录..."
    mkdir -p "$MYSQL_ROOT_DIR"
    echo "目录创建完成。"
  else
    echo "目录 $path 存在。"
  fi
}

# 运行容器
run_container(){
  local image_name="$1"
  local container_name="$2"
  echo "开始启动Mysql容器..."
  docker run -d -e MYSQL_ROOT_PASSWORD=$PASSWORD -e MYSQL_ROOT_HOST=% --restart always --name "$container_name" "$image_name"
  echo "Mysql容器启动完成。"
}

echo "开始检测docker环境"
check_dependency "docker"

echo "开始部署"$CONTAINER_NAME

# 判断容器是否存在，如果存在则重启，如果不存在则创建
if container_exist $CONTAINER_NAME ; then
  echo $CONTAINER_NAME"正在重启..."
  docker restart $CONTAINER_NAME
  echo $CONTAINER_NAME"容器已重启完成。"
  exit 0
fi


if ! image_exist $IMAGE_NAME ; then
  echo "开始拉取"$CONTAINER_NAME"镜像..."
  docker pull $IMAGE_NAME
  echo $CONTAINER_NAME"镜像拉取完成。"
fi

echo "开始创建"$CONTAINER_NAME"容器"
# 运行容器
run_container $IMAGE_NAME $CONTAINER_NAME

# 检测并创建目录
check_dir $MYSQL_ROOT_DIR

echo "开始配置"$CONTAINER_NAME"容器..."
docker cp $CONTAINER_NAME:/etc/my.cnf $MYSQL_ROOT_DIR/my.cnf
docker cp $CONTAINER_NAME:/var/lib/mysql $MYSQL_ROOT_DIR/data

docker rm -f $CONTAINER_NAME


docker run -d --name "$CONTAINER_NAME" \
 -p 3306:3306 \
 -p 33060:33060 \
 -e MYSQL_ROOT_PASSWORD=$PASSWORD \
 -e MYSQL_ROOT_HOST=% \
 --mount type=bind,src=$MYSQL_ROOT_DIR/data,dst=/var/lib/mysql \
 --mount type=bind,src=$MYSQL_ROOT_DIR/my.cnf,dst=/etc/my.cnf \
 --restart always  \
 "$IMAGE_NAME"
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $CONTAINER_NAME
echo "部署结束"